void mm_pin(struct mm_struct *mm)
{
+ if (xen_feature(XENFEAT_writable_page_tables))
+ return;
spin_lock(&mm->page_table_lock);
__pgd_pin(mm->pgd);
spin_unlock(&mm->page_table_lock);
void mm_unpin(struct mm_struct *mm)
{
+ if (xen_feature(XENFEAT_writable_page_tables))
+ return;
spin_lock(&mm->page_table_lock);
__pgd_unpin(mm->pgd);
spin_unlock(&mm->page_table_lock);
void mm_pin_all(void)
{
struct page *page;
+ if (xen_feature(XENFEAT_writable_page_tables))
+ return;
for (page = pgd_list; page; page = (struct page *)page->index) {
if (!test_bit(PG_pinned, &page->flags))
__pgd_pin((pgd_t *)page_address(page));
void mm_pin(struct mm_struct *mm)
{
+ if (xen_feature(XENFEAT_writable_page_tables))
+ return;
+
spin_lock(&mm->page_table_lock);
mm_walk(mm, PAGE_KERNEL_RO);
void mm_unpin(struct mm_struct *mm)
{
+ if (xen_feature(XENFEAT_writable_page_tables))
+ return;
+
spin_lock(&mm->page_table_lock);
xen_pgd_unpin(__pa(mm->pgd));
void mm_pin_all(void)
{
+ if (xen_feature(XENFEAT_writable_page_tables))
+ return;
+
while (!list_empty(&mm_unpinned))
mm_pin(list_entry(mm_unpinned.next, struct mm_struct,
context.unpinned));